function Node(value){
    this.value=value;
    this.Prev=null;
    this.Next=null;
    this.traits=null;
}
// function node_find(n,v) {

//     // body...
// }
function node_overlying(n,v)
{
    var n1=new Node(v);
    n1.Next=n;
    if(n!=null)
    {
        n.Prev=n1;
    }
    return n1; 
}
    //var nn=avl_increase(tree);
function node_pushback(n,v)
{
    var n1=new Node(v);
    n1.Prev=n;
    if(n!=null)
    {
        n.Next=n1;
    }
    return n1;
}

var num=new Node(4);
num=node_overlying(num,5);
console.log(node_size(num));
num=num.Next;
console.log(num.value);

function node_copy(n)
{
    if(n==null)
    {
        return null;
    }
    var n1=n;
    var re=new Node(n1.value);
    n1=n1.Next;
    var n2=re;
    while(n1!=null)
    {
        var nn=new Node(n1.value);
        n2.Next=nn;
        nn.Prev=n2;
        n1=n1.Next;
        n2=nn;
    }
    return re;
}
function node_size(n)
{
    var i=0;
    var n1=n;
    while(n1!=null)
    {
        i++;
        n1=n1.Next;
    }
    return i;
}
function node_reverse(n)
{
    if(n==null)
    {
        return null;
    }
    var re=n;
    if(re.Next!=null)
    {
        while(re.Next!=null)
        {
            re=re.Next;
        }
    }
    else
    {
        while(re.Prev!=null)
        {
            re=re.Prev;
        }

    }
    return re; 
}
function node_eliminate(n)
{
    if(n==null)
    {
        return;
    }
    var node1=n.Prev,node2=n.Next;
    if(node1!=null)
    {
        node1.Next=node2;
    }
    if(node2!=null)
    {
        node2.Prev=node1;
    }
}
function node_find(n,v) {
    var re=n;
    while(re!=null)
    {
        if(re.value==v)
        {
            break;
        } 
        re=re.Next;
    } 
    return re;
}
function node_delete_value(n,v) {
    var n1=node_find(n,v);
    var re=n;
    if(n1==null)
    {
        return re;
    }
    if(n1.Prev==null)
    {
        re=n1.Next;
    }
    node_eliminate(n1);

    return re;
}
function node_splicing(n1,n2) {

    var l1=node_copy(n1);
    var l2=node_copy(n2);
    var l3=node_reverse(l1);
    if(l1==null)
    {
        return l2;
    }
    else if(l2==null)
    {
        return l1;
    }
    else
    {
        l3.Next=l2;
        l2.Prev=l3;
    }
    return null;
    // body...
}


